LAMMPS (3 Nov 2022)
# SPH water over dam

atom_style         sph
dimension          2
newton             on
boundary           s s p
units              lj

read_data          data.sph
Reading data file ...
  orthogonal box = (0 0 -0.001) to (4.001 8.001 0.001)
  1 by 1 by 1 MPI processor grid
  reading atoms ...
  15702 atoms
  reading velocities ...
  15702 velocities
  read_data CPU = 0.037 seconds

# upper limit of timestep based on CFL-like criterion
# roughly estimate number of timesteps needed for 7.5 seconds

variable           h equal 0.03
variable           c equal 10.0 # soundspeed for Tait's EOS
variable           dt equal 0.1*${h}/${c}
variable           dt equal 0.1*0.03/${c}
variable           dt equal 0.1*0.03/10
variable           nrun equal 15.0/${dt}
variable           nrun equal 15.0/0.0003

# assign group name "bc" to boundary particles (type 2)
# assign group name "water" to water particles (type 1)

group              bc    type 2
6000 atoms in group bc
group              water type 1
9702 atoms in group water

# use hybrid pairstyle which does density summation
# with cutoff ${h} every timestep (1)
# use target density of 1000, soundspeed ${c} for Tait's EOS

pair_style         hybrid/overlay sph/rhosum 1 sph/taitwater
pair_coeff         * * sph/taitwater 1000.0 ${c} 1.0 ${h}
pair_coeff         * * sph/taitwater 1000.0 10 1.0 ${h}
pair_coeff         * * sph/taitwater 1000.0 10 1.0 0.03
pair_coeff         1 1 sph/rhosum ${h}
pair_coeff         1 1 sph/rhosum 0.03

# add gravity. This fix also computes potential energy of mass in gravity field

fix                gfix water gravity -9.81 vector 0 1 0
fix                2d_fix all enforce2d

compute            rho_peratom all sph/rho/atom
compute            e_peratom all sph/e/atom
compute            esph all reduce sum c_e_peratom
compute            ke all ke
variable           etot equal c_esph+c_ke+f_gfix
compute            ke_peratom all ke/atom

# adjust nevery | min. allowed dt | max. allowed dt |
# max. travel distance per dt
# ${dt} ~= CFL criterion 0.1*h/c

# remove top atoms

region            cut block INF INF 2.5 INF INF INF
delete_atoms      region cut
Deleted 3174 atoms, new total = 12528

# use a variable timestep

fix                dtfix all dt/reset 1 NULL ${dt} 0.0005 units box
fix                dtfix all dt/reset 1 NULL 0.0003 0.0005 units box

# time-integrate position, velocities,
# internal energy and density of water particles

fix                integrate_water_fix water sph

# time-integrate only internal energy and density of boundary particles

fix                integrate_bc_fix bc sph/stationary

thermo             500
thermo_style       custom step ke c_esph v_etot f_gfix press time f_dtfix
thermo_modify      norm no

# load balancing

comm_style      tiled
fix             100 all balance 100 0.9 rcb

# fix ave/grid

fix             ave all ave/grid 50 5 250 10 10 1 vx vy

# dump particles

#dump               dump_id all custom 100 tmp.dump #                   id type x y z c_ke_peratom
#dump_modify        dump_id first yes

# dump grid

#compute         ave all property/grid 10 10 1 id ix iy
#dump            ave all grid 250 tmp.grid c_ave:grid:data[*] f_ave:grid:data[*]
#dump_modify     ave sort 1

# dump image

#compute         1 all property/atom proc
#variable        p atom c_1%10

#dump            3 all image 500 tmp.*.png c_ke_peratom type #                adiam 0.015 view 0 0 zoom 2.5 subbox yes 0.01 #                center d 0.5 0.5 0.5 size 1024 768 box no 0.0 #                grid f_ave:grid:count
#variable        colors string #                "min blue 0.25 green 0.5 orange 0.75 yellow max red"
#dump_modify     3 pad 5 amap 0 1.5 cf 1 5 ${colors}

# run

neigh_modify       every 5 delay 0 check no
variable           skin equal 0.3*${h}
variable           skin equal 0.3*0.03
neighbor           ${skin} bin
neighbor           0.009 bin

run                6000
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
  update: every = 5 steps, delay = 0 steps, check = no
  max neighbors/atom: 2000, page size: 100000
  master list distance cutoff = 0.039
  ghost atom cutoff = 0.039
  binsize = 0.0195, bins = 205 411 1
  3 neighbor lists, perpetual/occasional/extra = 3 0 0
  (1) pair sph/rhosum, perpetual, skip from (3)
      attributes: full, newton on
      pair build: skip
      stencil: none
      bin: none
  (2) pair sph/taitwater, perpetual, half/full from (3)
      attributes: half, newton on
      pair build: halffull/newton
      stencil: none
      bin: none
  (3) neighbor class addition, perpetual
      attributes: full, newton on
      pair build: full/bin/atomonly
      stencil: full/bin/2d
      bin: standard
Per MPI rank memory allocation (min/avg/max) = 6.755 | 6.755 | 6.755 Mbytes
   Step         KinEng         c_esph         v_etot         f_gfix         Press           Time         f_dtfix    
         0   0              0              19320.854      19320.854     -3.624517       0              0            
       500   1274.8192      226.44643      19320.367      17819.101      754.35811      0.14057754     500          
      1000   2793.9358      410.18897      19320.367      16116.242      1184.8364      0.21912692     1000         
      1500   4227.2566      547.60309      19320.367      14545.508      1290.9567      0.27943572     1500         
      2000   5515.6545      763.42902      19320.367      13041.284      1468.5449      0.33279685     2000         
      2500   6595.5906      1087.0212      19320.368      11637.756      1878.9882      0.38198106     2500         
      3000   7053.147       1574.0538      19320.369      10693.168      2250.759       0.41605101     3000         
      3500   7396.4079      2058.4224      19320.369      9865.539       2517.1665      0.45034972     3500         
      4000   7690.0468      2419.389       19320.369      9210.9336      2615.8142      0.48685712     4000         
      4500   7986.5331      2529.7094      19320.369      8804.1268      2453.9595      0.52464306     4500         
      5000   8206.3658      2497.1242      19320.369      8616.879       1998.6296      0.56308208     5000         
      5500   8264.0602      2487.5778      19320.369      8568.7309      1614.3683      0.60225589     5500         
      6000   8185.7128      2570.3178      19320.369      8564.3383      1463.8307      0.64295437     6000         
Loop time of 22.4589 on 1 procs for 6000 steps with 12528 atoms

Performance: 1919.324 tau/day, 267.155 timesteps/s, 3.347 Matom-step/s
100.0% CPU use with 1 MPI tasks x no OpenMP threads

MPI task timing breakdown:
Section |  min time  |  avg time  |  max time  |%varavg| %total
---------------------------------------------------------------
Pair    | 15.365     | 15.365     | 15.365     |   0.0 | 68.41
Neigh   | 5.2774     | 5.2774     | 5.2774     |   0.0 | 23.50
Comm    | 0.021675   | 0.021675   | 0.021675   |   0.0 |  0.10
Output  | 0.0011944  | 0.0011944  | 0.0011944  |   0.0 |  0.01
Modify  | 1.6991     | 1.6991     | 1.6991     |   0.0 |  7.57
Other   |            | 0.09478    |            |       |  0.42

Nlocal:          12528 ave       12528 max       12528 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost:              0 ave           0 max           0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs:         153317 ave      153317 max      153317 min
Histogram: 1 0 0 0 0 0 0 0 0 0

Total # of neighbors = 153317
Ave neighs/atom = 12.237947
Neighbor list builds = 1200
Dangerous builds not checked

Total wall time: 0:00:22
